Conventionally, authoring a single or small set of executable software or other program code for what may be considered as bundling of multiple functions or operations into the single process code has had the advantage that communication between the multiple functions or operations is simplified. Communications between any two functions within the single executable program code has also been relatively simple in that communications between any two or more of the multiple functions may readily be achieved by passing or sharing memory contents or ranges within the single executable software or other program code.
Unfortunately, executing the single (or small set of) executable software or program code has had the disadvantage that it may contribute to instability because of functions that may sometimes tend to interfere with each other in unexpected ways during their execution in the real world, as well as possible susceptibility to security flaws, memory overflow, and other problems. It may also complicate the task for developers to work together without having detailed knowledge of other developers efforts.
Therefore, it has been recognized that in at least some instances, there are advantages to separating different functions or operations, even when related or when requiring coordination between the related functions, to separate the functions into different processes that have defined process boundaries and are executed independently and advantageously substantially autonomously from one another. Typically, however, since the processes are at least somewhat related or interdependent, some degree of communication between the different processes, usually referred to as Inter-Process Communications or IPC, is required to facilitate operation of the system as a whole.
Software and system designers have utilized various interprocess communications architectures and methods in the past to permit communications between different processes within in a system. Unfortunately, these architectures, methods, procedures, and interprocess communications techniques have had limitations so that they have not necessarily been universally applicable to the diverse range of system architectures, device characteristics, or functional and operational needs. They may also have had complicated interfaces that required relatively high levels of programming skills that added to the cost and time involved in implementing them and were more difficult to test and debug.
For example, some conventional interprocess communication or messaging techniques are protocol or transport layer dependent, or are client-server relationship specific in some way, or are merely remote program calls, or other situation where there is again an asymmetry, dependency, special treatment or characteristic, or bias toward one of the message sender or receiver. Furthermore, these conventional interprocess communication techniques, architectures and methods may not usually be able to efficiently and reliably provide the type of interprocess communication that are required for particular situations or applications.
One of conventional communication, that may be thought of as a pseudo interprocess communication technique was the Sun Microsystems remote program call (RPC) technique. Another was the Open Network Computing (ONC) remote program call technique. Each of these techniques involved specifying one or more interfaces to a library so that there was a client on one side of a network and a server on the other side of the network, and to the client it would essentially appear that the client was making a direct functional call to a library on the server even though was or might be a network between the client and the server based library. These RPC models may be considered to be asymmetric and very much client-server models which means at the very least that each side has either a special server characteristic, a special client characteristic, or some other side specific characteristic. These side specific characteristics are frequently undesirable in many applications.
Many of these conventional interprocess communication or pseudo interprocess communication models, methods, and techniques were also synchronous in that there was a need for the sender process to receive a response back from the intended recipient or receiver process before the sender process could continue. Since the response in many networking situations could take at least large fractions of a second, such synchronous operational requirements led to inefficiencies, unnecessary overhead, and reduced performance.
Conventional interprocess communication schemes and techniques and even the messages themselves were also frequently difficult to implement and typically required highly skilled computer programmers with an ability to program code in relatively low-level and non-intuitive languages such as the C, C++, and similar programming languages.
Conventional processes also frequently fell primarily or even exclusively into one of two models: a thread execution based model or a finite state machine based execution model.
Therefore, there remains a need for an interprocess communication method, model, and architecture in which the interprocess messaging is more symmetric and peer-to-peer or message producer-consumer like in approach without a bias as to which process, device, or system is the producer and which process, device, or system is the consumer of any particular messaging event. Even where there may actually be a server and a client, such labels from the standpoint of the messaging event are or should be relatively unimportant.
There also remains a need for a message structure that provides the desired message information and content and that is compatible with the messaging model and method.
There further remains a need for a message that is relatively easy to specify and that may advantageously be written in a relatively high-level language, such as for example in the XML language or other higher level language.
There also remains a need for a interprocess message communication methodology and message structure that permits the sharing of information across process boundaries whether the process boundaries exist between processes in a single hardware device or between separate hardware devices that are either collocated in a facility that may use one particular message transport layer, or coupled or connected over a communications link between geographically remote hardware devices or systems possibly using a different transport layer but the same message structure.
There also remains a need for an interprocess communication scheme and message structure that permits authoring and generating messages and communicating messages between different processes that is simple and efficient.
There also remains a need for an interprocess communication scheme and message structure that is suitable for wired, wireless, and hybrid wired and wireless network communication infrastructures, including infrastructures involving one or more of network servers, routers, switches, access points, and clients.
There also remains a need for an interprocess communication scheme and message structure that permits efficient operation with low overhead in both thread-based execution schemes and finite state machine based execution schemes, particularly as they may apply to different devices and systems in a network infrastructure and network packet processing environment.
There also remains a need for an interprocess communication scheme and message structure that permits the acquisition by one process of the status and statistical information known within or available from another process.
There also remains a need for an interprocess communication scheme and message structure that permits persistent and/or non-persistent setting of information or data using a message sent from a first process and received by a different process.